// eslint-disable-next-line
import * as loginService from '@/api/login'
// eslint-disable-next-line
import { BasicLayout, BlankLayout, PageView, RouteView } from '@/layouts'

// 前端路由表 (基于动态)
const constantRouterComponents = {
  // 基础页面 layout 必须引入
  BasicLayout: BasicLayout,
  BlankLayout: BlankLayout,
  RouteView: RouteView,
  PageView: PageView
  // '403': () => import(/* webpackChunkName: "error" */ '@/views/exception/403'),
  // '404': () => import(/* webpackChunkName: "error" */ '@/views/exception/404'),
  // '500': () => import(/* webpackChunkName: "error" */ '@/views/exception/500'),

  // 你需要动态引入的页面组件
  // Workplace: () => import('@/views/dashboard/Workplace'),
  // Analysis: () => import('@/views/dashboard/Analysis'),

  // form
  // BasicForm: () => import('@/views/form/basicForm'),
  // StepForm: () => import('@/views/form/stepForm/StepForm'),
  // AdvanceForm: () => import('@/views/form/advancedForm/AdvancedForm'),

  // list
  // TableList: () => import('@/views/list/TableList'),
  // StandardList: () => import('@/views/list/BasicList'),
  // CardList: () => import('@/views/list/CardList'),
  // SearchLayout: () => import('@/views/list/search/SearchLayout'),
  // SearchArticles: () => import('@/views/list/search/Article'),
  // SearchProjects: () => import('@/views/list/search/Projects'),
  // SearchApplications: () => import('@/views/list/search/Applications'),
  // ProfileBasic: () => import('@/views/profile/basic'),
  // ProfileAdvanced: () => import('@/views/profile/advanced/Advanced'),

  // result
  // ResultSuccess: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'),
  // ResultFail: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'),

  // exception
  // Exception403: () => import(/* webpackChunkName: "fail" */ '@/views/exception/403'),
  // Exception404: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'),
  // Exception500: () => import(/* webpackChunkName: "fail" */ '@/views/exception/500'),

  // // account
  // User: () => import('@/views/accountmanage/User'), // 系统管理 - 账户管理
  // Ppm: () => import('@/views/accountmanage/Ppm'), // 系统管理 - 平台端权限管理
  // Lpm: () => import('@/views/accountmanage/Lpm'), // 系统管理 - 律师端权限管理
  // Mpm: () => import('@/views/accountmanage/Mpm'), // 系统管理 - 商户端权限管理
  // SystemLogs: () => import('@/views/accountmanage/Log'), // 系统管理 - 平台日志
  // Caseset: () => import('@/views/accountmanage/Caseset'), // 系统管理 - 案件设置
  // Bagconfig: () => import('@/views/accountmanage/Bagconfig'), // 系统管理 - 案包报名设置
  // LprList: () => import('@/views/accountmanage/LprList'), // 系统管理 - 利率设置
  // Wtype: () => import('@/views/accountmanage/Wtype'), // 系统管理 - 工单类型设置
  // ExamineSet: () => import('@/views/accountmanage/ExamineSet'), // 系统管理 - 审批设置
  // MSet: () => import('@/views/accountmanage/MSet'), // 系统管理 - 消息管理
  // XcSet: () => import('@/views/accountmanage/XcSet'), // 系统管理 - 巡查设置
  // ConfigLsptday: () => import('@/views/accountmanage/ConfigLsptday'), // 系统管理 - 律服机器人设置
  // ConfigBoard: () => import('@/views/accountmanage/ConfigBoard'), // 系统管理 - 仪表盘设置
  // ConfigPrint: () => import('@/views/accountmanage/ConfigPrint'), // 系统管理 - 打印设置
  // TaskSet: () => import('@/views/accountmanage/TaskSet'), // 系统设置 - 案件任务设置
  // Feedbacktype: () => import('@/views/accountmanage/Feedbacktype'), // 系统设置 - 用户反馈设置
  // LinkSet: () => import('@/views/accountmanage/LinkSet'), // 系统设置 - 通话与短信设置
  // ConfigCaseOther: () => import('@/views/accountmanage/ConfigCaseOther'), // 其他案件信息设置
  // BuchongList: () => import('@/views/accountmanage/BuchongList'), // 补充材料设置
  // VisitSet: () => import('@/views/accountmanage/VisitSet'), // 访问设置
  // Home: () => import('@/views/home/Index'),
  // BHome: () => import('@/views/home/BHome'),
  // LHome: () => import('@/views/home/LHome'),
  // Merchant: () => import('@/views/informanage/Merchant'), // 信息库 - 合作商户
  // Lawyer: () => import('@/views/informanage/Lawyer'), // 信息库 - 律师列表
  // Assist: () => import('@/views/informanage/Assist'), // 信息库 - 协管员管理
  // Agent: () => import('@/views/informanage/Agent'), // 信息库 - 代理管理
  // Lawfirm: () => import('@/views/informanage/Lawfirm'), // 信息库 - 律所库
  // Court: () => import('@/views/informanage/Court'), // 信息库 - 法院库
  // Judge: () => import('@/views/informanage/Judge'), // 信息库 - 法官库
  // Adjunct: () => import('@/views/informanage/Adjunct'), // 信息库 - 辅助员管理
  // Adjunctinfo: () => import('@/views/informanage/Adjunctinfo'), // 信息库 - 辅助员详情页
  // Businfo: () => import('@/views/informanage/Businfo'), // 信息库 - 商户详情页
  // Lawinfo: () => import('@/views/informanage/Lawinfo'), // 信息库 - 律师详情页
  // Deputyinfo: () => import('@/views/informanage/Deputyinfo'), // 信息库 - 协管员详情
  // Agentinfo: () => import('@/views/informanage/Agentinfo'), // 信息库 - 代理详情页
  // Judgeinfo: () => import('@/views/informanage/Judgeinfo'), // 信息库 - 法官详情页
  // CourtInfo: () => import('@/views/informanage/CourtInfo'), // 信息库 - 法院详情页
  // Firminfo: () => import('@/views/informanage/Firminfo'), // 信息库 - 律所详情页
  // WabatchList: () => import('@/views/informanage/WabatchList'), // 信息库 - 律师管理 - 委案批次
  // MaterialInfo: () => import('@/views/informanage/MaterialInfo'), // 信息库 - 商户管理 - 原告信息管理
  // Courtadv: () => import('@/views/informanage/Courtadv'), // 信息库 - 法院库 - 任务
  // Casebatch: () => import('@/views/casemanage/Casebatch'), // 案源管理 - 案源批次管理
  // Casesecure: () => import('@/views/casemanage/Casesecure'), // 案源管理 - 案件保全管理
  // Casevouch: () => import('@/views/casemanage/Casevouch'), // 案源管理 - 案件担保管理
  // Caselist: () => import('@/views/casemanage/Caselist'), // 案源管理 - 案件管理
  // Casesign: () => import('@/views/casemanage/Casesign'), // 案源管理 - 分包与报名管理
  // Caseenter: () => import('@/views/casemanage/Caseenter'), // 案源管理 - 案件管理 - 案件录入
  // Casebatchenter: () => import('@/views/casemanage/Casebatchenter'), // 案源管理 - 案件管理 - 批量录入案件
  // Caseeinfo: () => import('@/views/casemanage/Caseeinfo'), // 案源管理 - 案件编辑页
  // Caseinfo: () => import('@/views/casemanage/Caseeinfo'), // 案源管理 - 案件详情页
  // Baginfo: () => import('@/views/casemanage/Baginfo'), // 案源管理 - 分包与报名管理 - 案包详情页
  // Bagmange: () => import('@/views/casemanage/Bagmange'), // 案源管理 - 案包管理页
  // DocSet: () => import('@/views/casemanage/DocSet'), // 案源管理 - 案件管理 - 文书批量管理
  // Caseimport: () => import('@/views/casemanage/Caseimport'), // 案源管理 - 案件管理 - 案件信息导出
  // BuChongList: () => import('@/views/casemanage/BuChongList'), // 补充材料管理
  // Lawbag: () => import('@/views/lawcasemanage/Lawbag'), // 律师端 - 案包管理
  // Lawbaginfo: () => import('@/views/lawcasemanage/Lawbaginfo'), // 律师端 - 案包详情页
  // Lawcase: () => import('@/views/lawcasemanage/Lawcase'), // 律师端 - 案件管理
  // Lawcaseeinfo: () => import('@/views/lawcasemanage/Lawcaseeinfo'), // 律师端 - 案件编辑页
  // Lawcaseinfo: () => import('@/views/lawcasemanage/Lawcaseeinfo'), // 律师端 - 案件详情页
  // MCasebatch: () => import('@/views/mercasemanage/MCasebatch'), // 商户端 - 批次管理
  // MCaselist: () => import('@/views/mercasemanage/MCaselist'), // 商户端 - 案件管理
  // Mcaseeinfo: () => import('@/views/mercasemanage/Mcaseeinfo'), // 商户端 - 案件编辑页
  // Mcaseinfo: () => import('@/views/mercasemanage/Mcaseeinfo'), // 商户端 - 案件详情页
  // // 'TestWork': () => import(/* webpackChunkName: "TestWork" */ '@/views/dashboard/TestWork')
  // Examine: () => import('@/views/aidemanage/Examine'), // 助手-审批中心
  // ExamineInfo: () => import('@/views/aidemanage/ExamineInfo'), // 助手 - 审批详情页
  // Notice: () => import('@/views/aidemanage/Notice'), // 助手 - 消息通知
  // MWork: () => import('@/views/aidemanage/MWork'), // 助手 - 工单管理
  // Winfo: () => import('@/views/aidemanage/Winfo'), // 助手 - 工单详情页
  // // OnlineDoc: () => import('@/views/aidemanage/OnlineDoc'), // 在线文档 未使用
  // FileHandle: () => import('@/views/aidemanage/FileHandle'),
  // LNotice: () => import('@/views/laidemanage/LNotice'),
  // MNotice: () => import('@/views/maidemanage/MNotice'),
  // FileResult: () => import('@/views/aidemanage/FileResult'),
  // TaskList: () => import('@/views/aidemanage/TaskList'),
  // Calendar: () => import('@/views/aidemanage/Calendar.vue'),
  // Print: () => import('@/views/aidemanage/PrintManage.vue'), // 打印管理
  // Borad: () => import('@/views/aidemanage/Borad.vue'), // 仪表盘
  // LinkCallList: () => import('@/views/aidemanage/LinkCallList.vue'), // 通话记录
  // Feedback: () => import('@/views/aidemanage/Feedback.vue'), // 用户反馈
  // CaseOtherData: () => import('@/views/aidemanage/CaseOtherData'), // 其他案件信息管理
  // LinkSmsList: () => import('@/views/aidemanage/LinkSmsList'), // 短信管理
  // Help: () => import('@/views/aidemanage/Help'), // 帮助中心
  // WorkView: () => import('@/views/aidemanage/WorkView'), // 我的工作
  // FileHandleResultsB: () => import('@/views/aidemanage/FileHandleResultsB'), // 检索结果
  // AdvanceList100: () => import('@/views/advancemanage/AdvanceList100'), // 案件推进 - 准备阶段
  // AdvanceList200: () => import('@/views/advancemanage/AdvanceList200'), // 案件推进 - 立案阶段列表
  // AdvanceList201: () => import('@/views/advancemanage/AdvanceList201'), // 案件推进 - 立案阶段无黑名单列表
  // AdvanceList202: () => import('@/views/advancemanage/AdvanceList202'), // 案件推进 - 立案阶段黑名单列表
  // AdvanceList300: () => import('@/views/advancemanage/AdvanceList300'), // 案件推进 - 审判阶段列表
  // AdvanceList301: () => import('@/views/advancemanage/AdvanceList301'), // 案件推进 - 审判阶段（一审）列表
  // AdvanceList302: () => import('@/views/advancemanage/AdvanceList302'), // 案件推进 - 审判阶段（支付令）列表
  // AdvanceList303: () => import('@/views/advancemanage/AdvanceList303'), // 案件推进 - 审判阶段（二审）列表
  // AdvanceList304: () => import('@/views/advancemanage/AdvanceList304'), // 案件推进 - 审判阶段（再审）列表
  // AdvanceList400: () => import('@/views/advancemanage/AdvanceList400'), // 案件推进 - 调和解阶段列表
  // AdvanceList500: () => import('@/views/advancemanage/AdvanceList500'), // 案件推进 - 撤诉阶段列表
  // AdvanceList600: () => import('@/views/advancemanage/AdvanceList600'), // 案件推进 - 执行阶段列表
  // AdvanceShow: () => import('@/views/advancemanage/AdvanceShow'),
  // XcReport: () => import('@/views/advancemanage/XcReport'),
  // XcreportView: () => import('@/views/advancemanage/XcreportView'),
  // Payment: () => import('@/views/financialmanage/Paymentlist'), // 财务管理 - 还款统计与对账
  // PayList: () => import('@/views/financialmanage/PayList'), // 财务管理 - 还款信息录入
  // PaymentPlam: () => import('@/views/financialmanage/PaymentPlam'), // 财务管理 - 调和解还款管理
  // PaymentDz: () => import('@/views/financialmanage/PaymentDz'), // 财务管理 - 查账信息管理
  // FeeList: () => import('@/views/financialmanage/FeeList') // 财务管理 - 费用信息管理
}

// 前端未找到页面路由（固定不用改）
const notFoundRouter = {
  path: '*',
  redirect: '/404',
  hidden: true
}

// 根级菜单
const rootRouter = {
  key: '',
  name: 'index',
  path: '',
  component: 'BasicLayout',
  redirect: '/dashboard',
  meta: {
    title: '首页'
  },
  children: []
}

// export const generatorStaticRouter = () => {

// }

/**
 * 动态生成菜单
 * @param token
 * @returns {Promise<Router>}
 */
export const generatorDynamicRouter = token => {
  return new Promise((resolve, reject) => {
    loginService
      .getCurrentUserNav(token)
      .then(res => {
        console.log('generatorDynamicRouter response:', res)
        const { menus } = res.data
        const menuNav = []
        const childrenNav = []
        // menus.push({
        //   component: 'WorkSet',
        //   id: 216,
        //   meta: {
        //     title: '工单类型设置',
        //     show: true
        //   },
        //   show: true,
        //   title: '工单类型设置',
        //   name: 'workset',
        //   parentId: 2
        // })
        // 后端数据, 根级树数组,  根级 PID
        listToTree(menus, childrenNav, 0)
        rootRouter.children = childrenNav
        menuNav.push(rootRouter)
        console.log('menuNav', menuNav)
        const routers = generator(menuNav)
        routers.push(notFoundRouter)
        console.log('routers', routers)
        resolve(routers)
      })
      .catch(err => {
        reject(err)
      })
  })
}

/**
 * 格式化树形结构数据 生成 vue-router 层级路由表
 *
 * @param routerMap
 * @param parent
 * @returns {*}
 */
export const generator = (routerMap, parent) => {
  return routerMap.map(item => {
    const { title, show, hideChildren, hiddenHeaderContent, target, icon, isred, keepAlive } = item.meta || {}
    const currentRouter = {
      // 如果路由设置了 path，则作为默认 path，否则 路由地址 动态拼接生成如 /dashboard/workplace
      path: item.path || `${(parent && parent.path) || ''}/${item.key}`,
      // 路由名称，建议唯一
      name: item.name || item.key || '',
      // 该路由对应页面的 组件 :方案1
      // component: constantRouterComponents[item.component || item.key],
      // 该路由对应页面的 组件 :方案2 (动态加载)
      component: constantRouterComponents[item.component || item.key] || (() => import(`@/views/${item.component}`)),

      // meta: 页面标题, 菜单图标, 页面权限(供指令权限用，可去掉)
      meta: {
        title: title,
        icon: icon || undefined,
        isred: isred || 0,
        keepAlive,
        hiddenHeaderContent,
        target: target,
        permission: item.name
      }
    }
    // 是否设置了隐藏菜单
    if (show === false) {
      currentRouter.hidden = true
    }
    // 是否设置了隐藏子菜单
    if (hideChildren) {
      currentRouter.hideChildrenInMenu = true
    }
    // 为了防止出现后端返回结果不规范，处理有可能出现拼接出两个 反斜杠
    if (!currentRouter.path.startsWith('http')) {
      currentRouter.path = currentRouter.path.replace('//', '/')
    }
    // 重定向
    item.redirect && (currentRouter.redirect = item.redirect)
    // 是否有子菜单，并递归处理
    if (item.children && item.children.length > 0) {
      // Recursion
      currentRouter.children = generator(item.children, currentRouter)
    }
    return currentRouter
  })
}

/**
 * 数组转树形结构
 * @param list 源数组
 * @param tree 树
 * @param parentId 父ID
 */
const listToTree = (list, tree, parentId) => {
  list.forEach(item => {
    // 判断是否为父级菜单
    if (item.parentId === parentId) {
      const child = {
        ...item,
        key: item.key || item.name,
        children: []
      }
      // 迭代 list， 找到当前菜单相符合的所有子菜单
      listToTree(list, child.children, item.id)
      // 删掉不存在 children 值的属性
      if (child.children.length <= 0) {
        delete child.children
      }
      // 加入到树中
      tree.push(child)
    }
  })
}
